package user;

import java.util.Map;
import java.util.TreeMap;

/**
 * 角色管理类
 */
public class UserMgr {
    private static UserMgr mgr = null;

    /**
     * 私有构造
     */
    private UserMgr() {
        //
    }

    // 单例
    public static UserMgr getInstance() {
        if (mgr == null) {
            mgr = new UserMgr();
        }
        return mgr;
    }

    /**
     * 获取角色句柄:根据id
     * 
     * @param id
     * @return
     */
    public User getUser(int id) {
        return users.get(id);
    }

    /**
     * 获取角色句柄:根据连接符
     * 
     * @param sock
     * @return
     */
    public User getUserBySock(int sock) {
        return usersSk.get(sock);
    }

    /**
     * 添加角色:登录游戏时
     * 
     * @param u
     * @return
     */
    public boolean addUser(User u) {
        if (u == null) {
            return false;
        }

        User tu = getUser(u.getID());
        if (tu != null) {
            return true;
        }

        users.put(u.getID(), u);
        usersSk.put(u.getID(), u);
        return true;
    }

    /**
     * 删除角色:登出游戏时
     * 
     * @param u
     * @return
     */
    public boolean delUser(User u) {
        if (u == null) {
            return false;
        }

        User tu = users.get(u.getID());
        if (tu == null) {
            return false;
        }

        users.remove(u.getID(), u);
        usersSk.remove(u.getID(), u);
        return true;
    }

    // ================================================================================================

    // private int mRobotId = 100; // 机器人id起始

    Map<Integer, User> users = new TreeMap<>(); // 角色列表 ID-->
    Map<Integer, User> usersSk = new TreeMap<>(); // 角色列表 sock-->
}
